package com.mes.bac.backend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.mes.bac.backend.dto.ReorderItemDTO;
import com.mes.bac.backend.entity.Dispatch;
import com.mes.bac.backend.vo.PieceLifecycleVO;
import com.mes.bac.backend.vo.ScheduleResultVO;
import com.mes.bac.backend.vo.WorkstationQueueVO;
import java.util.List;
import java.util.Optional;

public interface IDispatchService extends IService<Dispatch> {
    /**
     * 触发一次全局的智能调度，并返回调度结果
     * @return 调度结果列表
     */
    List<ScheduleResultVO> schedulePieces();

    /**
     * 将一个工件的状态更新为“正在加工”
     * @param dispatchId 调度记录ID
     */
    void startProcessing(Long dispatchId);


    /**
     * 根据工位ID获取其实时加工队列
     * @param wsid 工位ID
     * @return 队列视图对象列表
     */
    List<WorkstationQueueVO> getQueueByWorkstationId(String wsid);

    /**
     * 根据工件ID获取其完整的生命周期轨迹
     * @param pieceId 工件ID
     * @return 生命周期节点列表
     */
    List<PieceLifecycleVO> getPieceLifecycle(String pieceId);

    /**
     * 将一个工件的状态更新为“结束加工”，并返回其下一站的调度结果（如果有）
     * @param dispatchId 调度记录ID
     * @return 下一站的调度结果，如果没有下一站则返回 Optional.empty()
     */
    Optional<ScheduleResultVO> completeProcessing(Long dispatchId);

    /**
     * 将一个工件的状态更新为“暂停加工”
     * @param dispatchId 调度记录ID
     */
    void pauseProcessing(Long dispatchId);

    /**
     * 将一个工件的状态更新为“继续加工”
     * @param dispatchId 调度记录ID
     */
    void resumeProcessing(Long dispatchId);

    /**
     * 批量更新工位队列的顺序
     * @param reorderItems 包含dispatchId和新queueId的列表
     */
    void reorderQueue(List<ReorderItemDTO> reorderItems);
}